// 声明专门的函数用来在分配 Auth 的模态框中显示 Auth 的树形结构数据 
function fillAuthTree() {
	// 1.发送 Ajax 请求查询 Auth 数据
	var ajaxReturn = $.ajax({
		"url" : "assgin/get/all/auth.json",
		"type" : "post",
		"dataType" : "json",
		"async" : false

	});
	if (ajaxReturn.status != 200) {
		layer.msg(" 请 求 处 理 出 错 ！ 响 应 状 态 码 是 ： " + ajaxReturn.status
				+ " 说 明 是 ： " + ajaxReturn.statusText);
		return;
	}
	
	// 2.从响应结果中获取 Auth 的 JSON 数据
	// 从服务器端查询到的 list 不需要组装成树形结构，这里我们交给 zTree 去组装
	var authList = ajaxReturn.responseJSON.data;

	// 3.准备对 zTree 进行设置的 JSON 对象
	var setting = {
		"data" : {
			"simpleData" : {
				
				// 开启简单 JSON 功能 
				"enable": true,
				
				// 使用 categoryId 属性关联父节点，不用默认的 pId 了
				"pIdKey" : "categoryId"
			},
			
			"key":{
				// 使用 title 属性显示节点名称，不用默认的 name 作为属性名了
				"name" : "title"
			}
		},

		"check" : {
			"enable" : true
		}

	};
	// 4.生成树形结构
	// <ul id="authTreeDemo" class="ztree"></ul>
	$.fn.zTree.init($("#authTreeDemo"), setting, authList);
	
	// 获取 zTreeObj 对象
	var zTreeObj = $.fn.zTree.getZTreeObj("authTreeDemo");
	
	// 调用 zTreeObj 对象的方法，把节点展开
	zTreeObj.expandAll(true);
	
	// 5.查询已分配的 Auth 的 id 组成的数组
	ajaxReturn = $.ajax({
		"url" : "assign/get/assigned/auth/id/by/role/id.json",
		"type" : "post",
		"data" : {
			"roleId" : window.roleId
		},

		"dataType" : "json",
		"async" : false

	});

	if (ajaxReturn.status != 200) {
		layer.msg(" 请 求 处 理 出 错 ！ 响 应 状 态 码 是 ： " + ajaxReturn.status
				+ " 说 明 是 ： " + ajaxReturn.statusText);
		return;

	}
	
	// 从响应结果中获取 authIdArray
	var authIdArray = ajaxReturn.responseJSON.data;

	// 6.根据 authIdArray 把树形结构中对应的节点勾选上
	// ①遍历 authIdArray
	for (var i = 0; i < authIdArray.length; i++) {
		var authId = authIdArray[i];
		
		// ②根据 id 查询树形结构中对应的节点
		var treeNode = zTreeObj.getNodeByParam("id", authId);

		// ③将 treeNode 设置为被勾选 // checked 设置为 true 表示节点勾选
		var checked = true;

		// checkTypeFlag 设置为 false，表示不“联动”，不联动是为了避免把不该勾选的勾 选上
		var checkTypeFlag = false;
		
		// 执行
		zTreeObj.checkNode(treeNode, checked, checkTypeFlag);
	}
}

// 声明专门的函数显示确认模态框
function showConfirmModal(roleArray) {

	// 打开模态框
	$("#confirmModal").modal("show");

	$("#roleNameDiv").empty();

	// 全局变量范围创建数组用来存放id
	window.roleIdArray = [];

	// 遍历roleArray数组
	for (var i = 0; i < roleArray.length; i++) {
		var role = roleArray[i];
		var roleName = role.roleName;
		$("#roleNameDiv").append(roleName + "<br/>")

		var roleId = role.roleId;

		// 调用数组对象的push() 方法存入新元素
		window.roleIdArray.push(roleId);
	}

}

// 执行分页，生成页面效果，任何时候调用调用这个函数重新加载页面
function generatePage() {

	// 1.获取分页数据
	var pageInfo = getPageInfoRemote();

	// 2.填充表格
	fillTableBody(pageInfo);

}

// 远程访问服务器端程序获取PageInfo数据
function getPageInfoRemote() {

	var ajaxResult = $.ajax({
		"url" : "role/get/page/info.json",
		"type" : "post",
		"data" : {
			"pageNum" : window.pageNum,
			"pageSize" : window.pageSize,
			"keyword" : window.keyword
		},

		"async" : false,
		"dataType" : "json"
	});

	console.log(ajaxResult);

	// 判断当前响应状态码是否为200
	var statusCode = ajaxResult.status;

	// 如果当前请求状态码不是200发生错误，或者其他的意外情况
	if (statusCode != 200) {
		layer.msg("失败！响应状态码=" + statusCode + "说明信息" + ajaxResult.statusText);
		return null;
	}

	// 如果响应状态码200，请求成功，获取pageInfo
	var resultEntity = ajaxResult.responseJSON;

	// 从resultEntity获取result属性
	var result = resultEntity.result;

	// 判断result是否成功
	if (result == "FAILED") {
		layer.msg(resultEntity.message);
		return null;
	}

	// 确认result为成功后获取pageInfo
	var pageInfo = resultEntity.data;

	return pageInfo;

}

// 填充数据
function fillTableBody(pageInfo) {

	// 清楚以前旧的数据
	$("#rolePageBody").empty();

	// 这里清空是为了让没有搜索结果时不显示页码导航条
	$("#Pagination").empty();

	// 判断pageInfo是否有效
	if (pageInfo == null || pageInfo == undefined || pageInfo.list == null
			|| pageInfo.list.lenght == 0) {
		$("#rolePageBody").append(
				"<tr><td colspan='4'>抱歉！没有查询到您搜索的数据</td></tr>");
		return;
	}

	// 填充tablebody部分
	for (var i = 0; i < pageInfo.list.length; i++) {

		var role = pageInfo.list[i];

		var roleId = role.id;

		var roleName = role.name;

		var numberTd = "<td>" + (i + 1) + "</td>"
		var checkboxTd = "<td><input id='" + roleId
				+ "' class='itemBox' type='checkbox'></td>";
		var roleNameId = "<td>" + role.name + "</td>";

		var checkButton = "<button id='"
				+ roleId
				+ "'  type='button' class='btn btn-success btn-xs checkButton'><i class=' glyphicon glyphicon-check'></i></button>";

		// 通过buttun标签的id属性（别的属性其实也可以）把roleId值传递到button的单击响应函数中，在单击响应函数中
		var pencilButton = "<button id='"
				+ roleId
				+ "' type='button' class='btn btn-primary btn-xs pencilButton'><i class=' glyphicon glyphicon-pencil'></i></button>";
		var removeButton = "<button id='"
				+ roleId
				+ "' type='button' class='btn btn-danger btn-xs removeButton'><i class=' glyphicon glyphicon-remove'></i></button>";

		var buttonTd = "<td>" + checkButton + " " + pencilButton + " "
				+ removeButton + "</td>";

		var tr = "<tr>" + numberTd + checkboxTd + roleNameId + buttonTd
				+ "</tr> ";
		$("#rolePageBody").append(tr);

	}
	// 生成导航条
	generateNavigator(pageInfo);

}

// 生成导航条
function generateNavigator(pageInfo) {

	// 获取总的记录数
	var totalRecord = pageInfo.total;

	// 声明一个json对象存储Pagination要设置的属性
	var properties = {
		"num_edge_entries" : 3, // 边缘页数
		"num_display_entries" : 5, // 主体页数
		"callback" : paginationCallBack, // 指定用户点击翻页的按钮时跳转页面的回调函数
		"items_per_page" : pageInfo.pageSize, // 每页要显示的数据数量
		"current_page" : pageInfo.pageNum - 1, // Pagination内部使用pageIndex来管理页码，pageNum从1开始，pageIndex要-1
		"prev_text" : "上一页", // 上一页按钮显示的文本
		"next_text" : "下一页"
	};

	// 生成页码导航条
	$("#Pagination").pagination(totalRecord, properties);

}

// 回调函数
function paginationCallBack(pageIndex, jQuery) {

	// 根据pageIndex计算得到pageNum
	window.pageNum = pageIndex + 1;

	// 调用分页函数
	generatePage();

	// 由于每一个页码按钮都是超链接，所以在这个函数最后去掉超链接的默认行为
	return false;
}
